﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Newtonsoft.Json;
using Entity.Custom;
using Entity;
using Business;

namespace FreshCms.BackEnd.Handler
{
    /// <summary>
    /// Summary description for Login
    /// </summary>
    public class Login : IHttpHandler,System.Web.SessionState.IRequiresSessionState                 
    {

        public void ProcessRequest(HttpContext context)
        {
            string m = "";
            var response = new ResponseData();

            if (context.Request.RequestType == "POST")
            {
                if (context.Request["m"] != null)
                    m = context.Request["m"];
                else
                    return;
            }
            else
            {
                if (context.Request.QueryString["m"] != null)
                    m = context.Request.QueryString["m"];
                else
                    return;
            }

            switch (m.ToLower())
            {
                case "checklogin":
                    response = CheckLogin(context);
                    break;
            }

            context.Response.ContentType = "application/x-javascript";

            string callBack = context.Request["callback"];
            if (!string.IsNullOrEmpty(callBack))
            {
                context.Response.Write(callBack + "( " + JsonConvert.SerializeObject(response) + " );");
            }
            else
                context.Response.Write(JsonConvert.SerializeObject(response));
        }

        private ResponseData CheckLogin(HttpContext context)
        {
            var response = new ResponseData();

            string email = "";
            string pass = "";

            if (!string.IsNullOrEmpty(context.Request["email"]) && !string.IsNullOrEmpty(context.Request["pass"]))
            {
                email = context.Request["email"];
                pass = context.Request["pass"];

                InUser obj = InUserBusiness.CheckLogin(email, pass);

                if (obj == null)
                {
                    return new ResponseData
                    {
                        Data = -1,
                        Success = false,
                        Message = "Tài khoản đăng nhập hoặc mật khẩu không tồn tại trong hệ thống."
                    };
                }

                if (!(obj.GroupStatus > 0))
                {
                    return new ResponseData
                    {
                        Data = -1,
                        Success = false,
                        Message = "Nhóm của người dùng của bạn đã bị khoá."
                    };
                }

                if (obj.UserStatus == 1)
                {
                    response.Data = obj.UserId;
                    response.Success = true;
                    response.Message = "Đăng nhập thành công.";

                    context.Session["User"] = obj;

                    InLogBusiness.InsertInLog(new InLog {
                        UserId = obj.UserId, 
                        LogAction = 3,
                        Field1 = "Đăng nhập hệ thống thành công",
                        Field2 = "ID = " + obj.UserId + "",
                        Field3 = "",
                        LogId = 0
                    });
                }
                else
                {
                    response.Data = -1;
                    response.Success = false;
                    response.Message = "Tài khoản của bạn đang bị khóa.";
                }
                
            }
            else
            {
                response.Data = -1;
                response.Success = false;
                response.Message = "Param not valid";
            }

            return response;
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}